﻿namespace RainbowNavBar
{
    public enum FunType
    {
        URL,
        APPLICATION,
        FILE,
        EXIT,
        SETTINGS,
        SYSTEM,
    }

    public class Entries
    {
        public FunType FunType;
        public string Address;
    }

    public static class AppConfig
    {
        /** 必要属性 **/
        public static string Language {  get; set; } // 应用语言
        public static string Version { get; set; } // 应用版本
        public static Boolean StartUp { get; set; } //开机启动
        public static Boolean Location { get; set; } //导航位置
        public static Boolean Computer { get; set; } //我的电脑
    }

    public class TagData : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        /** 必要属性 **/
        public bool IsModify { get; set; } = false;
        public int TagIndex { get; set; }
        public Label TagLabel { get; set; }
        public FunType TagType { get; set; }
        public Color TagColor { set; get; }
        //public Brush TagColor_s { set; get; }
        public Brush TagColor_s { set; get; }
        public bool TagEnable { get; set; }
        public System.Windows.Media.Imaging.BitmapImage TagIcon { set; get; }
        public string TagName { set; get; }
        public string TagDescription { set; get; }
        public string TagAddress { set; get; }

        /** 扩展属性 **/

        /** 无参构造函数 **/
        public TagData() { }

        /** 拷贝构造函数 **/
        public TagData(TagData other)
        {
            TagIndex = other.TagIndex;
            TagLabel = other.TagLabel;
            TagType = other.TagType;
            TagColor = other.TagColor;
            TagColor_s = other.TagColor_s;
            TagEnable = other.TagEnable;
            TagIcon = other.TagIcon;
            TagName = other.TagName;
            TagDescription = other.TagDescription;
            TagAddress = other.TagAddress;
        }

        /** 传入的对象是否于本对象相同 **/
        public bool Equals(TagData other)
        {
            // 确保 other 不为 null
            if (other == null)
            {
                return false;
            }

            // 比较每个属性
            return TagIndex == other.TagIndex &&
                   TagLabel == other.TagLabel && // 比较标签是否相同，Label是引用类型，直接用 == 比较地址
                   TagType == other.TagType && // FunType 是值类型，可以直接用 == 比较
                   TagColor == other.TagColor && // Color 是结构体，可以直接用 == 比较
                   GlobalFunction.BrushesAreEqual(TagColor_s, other.TagColor_s) && // Brush 是引用类型，比较引用地址
                   TagEnable == other.TagEnable && // bool 是值类型，可以直接用 == 比较
                   Equals(TagIcon, other.TagIcon) && // BitmapImage 是引用类型，使用 Equals 比较内容
                   TagName == other.TagName && // string 是引用类型，可以直接用 == 比较值
                   TagDescription == other.TagDescription && // 同样，string 比较值
                   TagAddress == other.TagAddress; // string 比较值
        }

    }
}
